package notes.java.java8.demo;

import java.util.ArrayList;
import java.util.List;
import java.util.stream.Stream;

/**
 * Stream API
 * 中间操作
 */
public class J6_TestStream2 {
	
	public static void main(String[] args) {
		List<String> list = new ArrayList<>();
		list.add("zhangsan");
		list.add("wangwu");
		list.add("liuqiadson");
		list.add("wangwu");
		
		Stream<String> stream = list.stream();
		// 1、筛选与切片
		// 1.1、filter，从流中过滤部分元素
//		stream.filter((x)->x.contains("a")).forEach(System.out::println); // 名字中含有a的
		// 1.2、limit 截断流，限制元素个数
//		stream.limit(2).forEach(System.out::println);
		// 1.3、skip，返回一个扔掉前n个元素的流与limit互补
//		stream.skip(2).forEach(System.out::println);
		// 1.4 distinct，去重
//		stream.distinct().forEach(System.out::println);
		
		// 2、映射
		// 2.1、map，应用到每个元素上，产生一个新的Stream，类似于list.add()与addAll()区别
//		stream.map((x)->x.toUpperCase()).forEach(System.out::println);
		// 2.2、flatMap，与map类似，将map中的每一元素变成一个个stream 再返回一个大的stream
//		Stream<List<Integer>> inputStream = Stream.of(
//				 Arrays.asList(1),
//				 Arrays.asList(2, 3),
//				 Arrays.asList(4, 5, 6)
//				 );
//		Stream<Integer> outputStream = inputStream.flatMap((childList) -> childList.stream());
//		outputStream.forEach(System.out::println);
		
		// 3、排序
		// 3.1、sorted，自然排序(compareable)
//		stream.sorted().forEach(System.out::println);
		// 3.2、sorted(comparator com)定制排序(comparator)
		stream.sorted((x, y)->{
			return Integer.compare(x.length(), y.length()); // 自定义按字符长度排序
		}).forEach(System.out::println);
		
		
	}

}
